package com.laiketui.plugin.common.interfaces;

import com.laiketui.plugin.common.domain.MainVo;
import com.laiketui.plugin.common.domain.base.AdminModel;
import com.laiketui.plugin.common.domain.base.User;
import com.laiketui.core.exception.LaiKeAPIException;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * 公共服务
 *
 * @author Trick
 * @date 2020/10/23 10:21
 */
public interface PubliceService {

    /**
     * 获取图片路径 - 根据指定的商城id获取oss图片
     *
     * @param imgName -
     * @param storeId -
     * @return String
     * @throws LaiKeAPIException -
     * @author Trick
     * @date 2020/12/28 11:05
     */
    String getImgPath(String imgName, Integer storeId) throws LaiKeAPIException;

    /**
     * 获取已经登陆的用户
     *
     * @param vo -
     * @return User
     * @throws LaiKeAPIException-
     * @author Trick
     * @date 2021/12/30 10:02
     */
    User getRedisUserCache(MainVo vo) throws LaiKeAPIException;

    /**
     * 发送短信
     * 【php Tool.generate_code】
     *
     * @param storeId     -
     * @param phone       -
     * @param type        - 短信类型
     * @param smsType     - 短信模式  0:验证码 1:短信通知
     * @param smsParmaMap - 短信参数 ,只有通知类型的短信才传
     * @return Map
     * @throws LaiKeAPIException -
     * @author Trick
     * @date 2020/12/3 16:20
     */
    boolean sendSms(int storeId, String phone, int type, int smsType, Map<String, String> smsParmaMap) throws LaiKeAPIException;


    /**
     * 区分购物车结算和立即购买---列出选购商品
     * <p>
     * php : tools.products_list
     *
     * @param goodsInfoList -[{"pid":"979"},{"cid":"5648"},{"num":1},{"sec_id":"6"}--秒杀id,{}] 商品信息
     * @param cartIds       - 购物车
     * @param buyType       - 购买类型 默认0 再次购买1
     * @param orderHead     - 订单头部
     * @return Map
     * @throws LaiKeAPIException -
     * @author Trick
     * @date 2020/10/27 14:42
     */
    List<Map<String, Object>> productsList(List<Map<String, Object>> goodsInfoList, String cartIds, int buyType, String orderHead) throws LaiKeAPIException;


    /**
     * 订单确认页面获取商品信息
     *
     * @param products    -
     * @param storeId     -
     * @param productType -
     * @return List
     * @throws LaiKeAPIException -
     * @author wangxian
     * @date 2020/11/11 10:17
     */
    Map<String, Object> settlementProductsInfo(List<Map<String, Object>> products, int storeId, String productType) throws LaiKeAPIException;

    /**
     * 计算会员折扣
     *
     * @param params
     * @param storeId
     * @param userId
     * @return
     * @throws LaiKeAPIException
     */
    Map<String, Object> getMemberPrice(List<Map<String, Object>> params, String userId, int storeId) throws LaiKeAPIException;


    /**
     * 上传图片
     *
     * @param multipartFiles - 图片集
     * @param uploadType     - 上传方式
     * @param storeType      - 来源
     * @param storeId        - 商城id
     * @param mchId          - 店铺id
     * @return List
     * @throws LaiKeAPIException -
     * @author Trick
     * @date 2020/11/24 9:58
     */
    List<String> uploadImage(List<MultipartFile> multipartFiles, String uploadType, int storeType, int storeId, Integer mchId) throws LaiKeAPIException;

    /**
     * 上传图片
     *
     * @param multipartFiles -
     * @param uploadType     - 上传方式
     * @param storeType      - 来源
     * @param storeId        -
     * @return List
     * @throws LaiKeAPIException -
     * @author Trick
     * @date 2021/3/4 10:15
     */
    List<String> uploadImage(List<MultipartFile> multipartFiles, String uploadType, int storeType, int storeId) throws LaiKeAPIException;

    /**
     * 获取商品评论信息
     *
     * @param parmaMap -
     * @return List
     * @throws LaiKeAPIException -
     * @author Trick
     * @date 2020/10/29 17:37
     */
    List<Map<String, Object>> getGoodsCommentList(Map<String, Object> parmaMap) throws LaiKeAPIException;

    /**
     * 获取商品支持的活动类型
     *
     * @param storeId -
     * @return List
     * @throws LaiKeAPIException -
     * @author Trick
     * @date 2021/6/1 15:46
     */
    List<Map<String, Object>> getGoodsActive(int storeId) throws LaiKeAPIException;

    /**
     * 获取商品支持的活动类型
     *
     * @param storeId -
     * @param active  -
     * @return List
     * @throws LaiKeAPIException-
     * @author Trick
     * @date 2021/8/26 16:28
     */
    List<Map<String, Object>> getGoodsActive(int storeId, Integer active) throws LaiKeAPIException;

    /**
     * 获取后台权限按钮
     * 【php dbAction.Jurisdiction】
     *
     * @param storeId -
     * @param admin   - 当前登录人
     * @param url     - 需要判断权限的url
     * @return boolean
     * @throws LaiKeAPIException-
     * @author Trick
     * @date 2021/8/3 15:28
     */
    @Deprecated
    boolean jurisdiction(int storeId, AdminModel admin, String url) throws LaiKeAPIException;

    /**
     * 判断插件是否开启
     *
     * @param pluginCode - 插件代码
     * @param pluginMap  - 返回结果引用
     * @param storeId    -
     * @return boolean
     * @throws LaiKeAPIException -
     * @author Trick
     * @date 2020/11/4 10:00
     */
    boolean frontPlugin(int storeId, Integer mchId, String pluginCode, Map<String, Integer> pluginMap) throws LaiKeAPIException;

    /**
     * 插件活动是否开启
     *
     * @param storeId    -
     * @param pluginCode -
     * @return boolean
     * @throws LaiKeAPIException-
     * @author Trick
     * @date 2023/3/22 15:01
     */
    boolean activityPlugin(int storeId, String pluginCode) throws LaiKeAPIException;

    /**
     * 获取店铺商品统计信息
     * 返回:
     * [key:    quantity_on_sale、quantity_sold、collection_num]
     * [value:  在售商品数量、已售数量、收藏数量]
     * 【php: mch.commodity_information】
     *
     * @param storeId -
     * @param mchId   -
     * @return Map
     * @throws LaiKeAPIException -
     * @author Trick
     * @date 2022-01-18 11:17:54
     */
    Map<String, Object> commodityInformation(int storeId, int mchId) throws LaiKeAPIException;

    /**
     * 获取商品回复明细
     *
     * @param parmaMap -
     * @return List
     * @throws LaiKeAPIException-
     * @author Trick
     * @date 2023/3/10 20:15
     */
    Map<String, Object> getCommentsDetailInfoById(Map<String, Object> parmaMap) throws LaiKeAPIException;

    /**
     * 删除评论回复
     *
     * @param vo  -
     * @param cid -
     * @throws LaiKeAPIException-
     * @author Trick
     * @date 2023/3/10 20:43
     */
    void delCommentsDetailInfoById(MainVo vo, int cid) throws LaiKeAPIException;

    /**
     * 获取微信token
     *
     * @param storeId -
     * @return boolean
     * @throws LaiKeAPIException -
     * @author Trick
     * @date 2020/12/17 9:13
     */
    String getWeiXinToken(int storeId) throws LaiKeAPIException;

    /**
     * 添加操作记录
     *
     * @param storeId -
     * @param userId  -
     * @param text    -
     * @param type    - 0:登录/退出 1:添加 2:修改 3:删除 4:导出 5:启用/禁用 6:通过/拒绝 10删除订单
     * @param source  - 1.管理平台 2.PC店铺
     * @param mchId   - 店铺id
     * @return boolean
     * @throws LaiKeAPIException -
     * @author gp
     * @date 2023-12-05 15:01:38
     */
    boolean addAdminRecord(int storeId, String userId, String text, int type, int source, int mchId) throws LaiKeAPIException;


    /**
     * 添加操作记录
     *
     * @param storeId -
     * @param userId  -
     * @param text    -
     * @param type    - 0:登录/退出 1:添加 2:修改 3:删除 4:导出 5:启用/禁用 6:通过/拒绝 10删除订单
     * @param source  - 1.管理平台 2.PC店铺
     * @param mchId   - 店铺id
     * @param adminId - lkt_admin的id
     * @return boolean
     * @throws LaiKeAPIException -
     * @author gp
     * @date 2023-12-05 15:01:38
     */
    boolean addAdminRecord(int storeId, String userId, String text, int type, int source, int mchId,int adminId) throws LaiKeAPIException;



    /**
     * 增加操作记录，pc和管理后台共用一个接口
     * @param storeId
     * @param text
     * @param type    - 0:登录/退出 1:添加 2:修改 3:删除 4:导出 5:启用/禁用 6:通过/拒绝 10删除订单
     * @return
     * @throws LaiKeAPIException
     */
    boolean addAdminRecord(int storeId, String text, int type,String token) throws LaiKeAPIException;
}
